--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / codec2DecodeLimits.js
Displaying Raw • Download
meshchatx/src/frontend/js/codec2DecodeLimits.js 9f71f3420c18d5800afb493b723c328d23c7ea12 (9f71f342) Text, 1.05 KB
T8b949e// SPDX-License-Identifier: 0BSD
T8b949e/** Caps for Codec2 decode expansion (voice notes). Encoded LXMF audio is small; PCM/WAV is not. */
Tff7b72export Tff7b72const Te6edf3MAX_CODEC2_ENCODED_BYTES Tff7b72= T79c0ff512 Tff7b72* T79c0ff1024Tb4b4b4;
T8b949e/** ~8 minutes of 8 kHz mono 16-bit PCM before WAV wrap. */
Tff7b72export Tff7b72const Te6edf3MAX_CODEC2_DECODED_RAW_BYTES Tff7b72= T79c0ff8 Tff7b72* T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4;
T8b949e/** WAV header + PCM. Slightly above raw cap. */
Tff7b72export Tff7b72const Te6edf3MAX_CODEC2_WAV_BYTES Tff7b72= Te6edf3MAX_CODEC2_DECODED_RAW_BYTES Tff7b72+ T79c0ff44Tb4b4b4;
T8b949e/** Opus attachments are stored compressed; still bound blob URL creation. */
Tff7b72export Tff7b72const Te6edf3MAX_OPUS_ATTACHMENT_BYTES Tff7b72= T79c0ff2 Tff7b72* T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4;
T8b949e/**
* @param {ArrayBuffer | Uint8Array | null | undefined} data
* @param {number} maxBytes
* @returns {Uint8Array}
*/
Tff7b72export Tff7b72function Te6edf3assertByteLengthAtMostTb4b4b4(Te6edf3dataTb4b4b4, Te6edf3maxBytesTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3data Tff7b72== Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Missing audio data"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3bytes Tff7b72= Te6edf3data Tff7b72instanceof Tffa657Uint8Array Tff7b72? Te6edf3data Tff7b72: Tff7b72new Tffa657Uint8ArrayTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3bytesTb4b4b4.Te6edf3byteLength Tff7b72> Te6edf3maxBytesTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffAudio exceeds size limit (Tffd700${Te6edf3bytesTb4b4b4.Te6edf3byteLengthTffd700}Ta5d6ff > Tffd700${Te6edf3maxBytesTffd700}Ta5d6ff)Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3bytesTb4b4b4;
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────